package com.bw.controller;

import com.alibaba.fastjson.JSONObject;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import org.spring.kun.common.GiteeUtils;
import org.spring.kun.common.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;

@Controller
public class GiteeLoginController {

    @Autowired
    UserMapper userMapper;

    /**
     * 接收 gitee系统 发给我们的临时授权码
     *
     * @param code
     * @return
     */
    @RequestMapping("callbackCode.do")
    public String callbackCode(String code, HttpServletResponse response) {

        System.out.println("接收到的临时授权码 " + code);
        //通过临时授权码 获取token
        String tokenByCode = GiteeUtils.getAccessTokenByCode(code);
        System.out.println("获取到的token " + tokenByCode);
        // 通过token 获取用户资料
        JSONObject userInfoByToken = GiteeUtils.getGiteeUserInfoByToken(tokenByCode);

        System.out.println("获取到的用户资料 " + userInfoByToken.toJSONString());

        // 开始注册   选取 4个字段进行注册
        // 把 个人空间地址 当做 自己系统的用户名
        String name = userInfoByToken.getString("login");
        // 把 用户名称 当做 自己系统的昵称
        String nickName = userInfoByToken.getString("name");
        //  头像
        String avatarUrl = userInfoByToken.getString("avatar_url");
        //  把 主键ID 当做自己系统的 gitee_id
        Integer giteeId = userInfoByToken.getInteger("id");


//        判断之前是否已经注册过
        User userDB = userMapper.selectByName(name);

        if (userDB == null) {
            userDB = new User();
            userDB.setName(name);
            userDB.setNickName(nickName);
            userDB.setAvatarUrl(avatarUrl);
            userDB.setGiteeId(giteeId);
            userMapper.addUser(userDB);
        }

        // 加密用户信息得到token  把token放入 cookie  把cookie返回给浏览器

        TokenUtils.responseTokenByCookie(userDB, response, 30);

        return "redirect:list.do";
    }
}
